// https://leetcode.cn/problems/roman-to-integer/
// Created by ade on 2022/8/19.
// I             1
// V             5
// X             10
// L             50
// C             100
// D             500
// M             1000

//        int ans = 0;
//        int n = s.length();
//        for (int i = 0; i < n; ++i) {
//            int value = symbolValues[s[i]];
//            if (i < n - 1 && value < symbolValues[s[i + 1]]) {
//                ans -= value;
//            } else {
//                ans += value;
//            }
//        }
//        return ans;

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char, int> m = {
                {'I', 1},
                {'V', 5},
                {'X', 10},
                {'L', 50},
                {'C', 100},
                {'D', 500},
                {'M', 1000}
        };
        int prev = m[s[0]];
        int res = 0;
        int len = s.size();
        for (int i = 1; i < len; i++) {
            if (m[s[i]] > prev) {
                res -= prev;
            } else {
                res += prev;
            }
            prev = m[s[i]];
        }
        res += m[s[len - 1]];
        return res;
    }
};

int main() {
    Solution so;
    string s = "LVIII";// 58
    cout << so.romanToInt(s) << endl;
    return 0;
}